Next: Tabulated List Mode, Previous: Basic Major Modes, Up: Major Modes [Contents][Index]
Every major mode command should finish by running the
mode-independent normal hook
change-major-mode-after-body-hook, its mode hook,
and the normal hook after-change-major-mode-hook. It
does this by calling run-mode-hooks. If the major
mode is a derived mode, that is if it calls another major mode
(the parent mode) in its body, it should do this inside
delay-mode-hooks so that the parent won’t run
these hooks itself. Instead, the derived mode’s call to
run-mode-hooks runs the parent’s mode hook
too. See Major Mode
Conventions.
Emacs versions before Emacs 22 did not have
delay-mode-hooks. Versions before 24 did not have
change-major-mode-after-body-hook. When
user-implemented major modes do not use
run-mode-hooks and have not been updated to use
these newer features, they won’t entirely follow these
conventions: they may run the parent’s mode hook too early,
or fail to run after-change-major-mode-hook. If you
encounter such a major mode, please correct it to follow these
conventions.
When you define a major mode using
define-derived-mode, it automatically makes sure
these conventions are followed. If you define a major mode
“by hand”, not using
define-derived-mode, use the following functions to
handle these conventions automatically.
Major modes should run their mode hook using this
function. It is similar to run-hooks (see
Hooks), but it also runs
change-major-mode-after-body-hook and
after-change-major-mode-hook.
When this function is called during the execution of a
delay-mode-hooks form, it does not run the hooks
immediately. Instead, it arranges for the next call to
run-mode-hooks to run them.
When one major mode command calls another, it should do so
inside of delay-mode-hooks.
This macro executes body, but tells all
run-mode-hooks calls during the execution of
body to delay running their hooks. The hooks will
actually run during the next call to
run-mode-hooks after the end of the
delay-mode-hooks construct.
This is a normal hook run by run-mode-hooks.
It is run before the mode hooks.
This is a normal hook run by run-mode-hooks.
It is run at the very end of every properly-written major
mode command.
Next: Tabulated List Mode, Previous: Basic Major Modes, Up: Major Modes [Contents][Index]